package ar.republicagroup.gestion.services.impl;

import ar.republicagroup.gestion.dao.ChequeEstadoDAO;
import ar.republicagroup.gestion.entities.Cheque;
import ar.republicagroup.gestion.entities.ChequeEstado;
import ar.republicagroup.gestion.services.CalendarioBancarioServices;
import ar.republicagroup.gestion.services.ChequeEstadoServices;
import ar.republicagroup.gestion.util.JComboBoxModel;
import ar.republicagroup.gestion.util.SpringUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import org.apache.log4j.Logger;

public class ChequeEstadoServicesImpl implements ChequeEstadoServices{
    
    
    ChequeEstadoDAO chequeEstadoDao;
    private static Logger log = Logger.getLogger(ChequeEstadoServicesImpl.class);
    

    public void setChequeEstadoDao(ChequeEstadoDAO chequeEstadoDao) {
        this.chequeEstadoDao = chequeEstadoDao;
    }

    @Override
    public List<ChequeEstado> findEntities() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<ChequeEstado> getChequesByFilters(String filter1) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String insert(ChequeEstado beanChequeEstado) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String update(ChequeEstado beanCheque) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ChequeEstado get(Integer id_cheque_estado) {
       return chequeEstadoDao.get(id_cheque_estado);
    }

    @Override
    public String delete(Integer id_cheque_estado) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public DefaultComboBoxModel combo(int tipoDeEstados) {
       return chequeEstadoDao.combo(tipoDeEstados);
       
    }

    /* Business Logic */
    
    @Override
    public List<Cheque> rollbackChequeEstadoToAprobado(List<Cheque> chequeList) {
             int indice = 0;
             ChequeEstado estadoIngresado = chequeEstadoDao.get(ChequeEstadoServices.ESTADO_INGRESADO);
             System.out.println(estadoIngresado.getNombre()+" "+estadoIngresado.getId());
             for(Cheque cheque : chequeList){
                        cheque.setChequeEstadoId(estadoIngresado);
                        chequeList.set(indice, cheque);
                        indice++;
                    }             
             return chequeList;
    }

    @Override
    public List<Cheque> cambiarEstadosDeChequesSegunLiquidacion(List<Cheque> chequeList, Vector<Vector> dataModel) {
                CalendarioBancarioServices calendarioBancarioServices = (CalendarioBancarioServices)SpringUtils.getBean("calendarioBancarioServices");    
        
                int indice = 0;
                        //Seteamos los estados seleccionados en los cheques
                    for(Cheque cheque : chequeList){
                        JComboBoxModel comboEstados = (JComboBoxModel)dataModel.get(indice).elementAt(11);
                        cheque.setChequeEstadoId(new ChequeEstado(Integer.valueOf(comboEstados.getValue()),comboEstados.getLabel()));
                        if(Integer.parseInt(comboEstados.getValue()) == ChequeEstadoServices.CHEQUE_PENDIENTE){
                            Calendar fechaPendiente = calendarioBancarioServices.calcularSiguienteDiaHabil();
                            cheque.setFechaPendiente(fechaPendiente.getTime());
                            log.info("Próximo día habil : "+fechaPendiente.getTime());
                            log.info("Fecha pendiente asignada!");
                        }
                        cheque.setFechaUpdate(new Date());
                        chequeList.set(indice, cheque);
                        indice++;
                        
                    }
                    
                    return chequeList;
    }
    
    public static List<Cheque> cambiarEstadosDeChequesSegunLiquidacion2(List<Cheque> chequeList, Vector<Vector> dataModel) {
                CalendarioBancarioServices calendarioBancarioServices = (CalendarioBancarioServices)SpringUtils.getBean("calendarioBancarioServices");    
        
                int indice = 0;
                        //Seteamos los estados seleccionados en los cheques
                    for(Cheque cheque : chequeList){
                        JComboBoxModel comboEstados = (JComboBoxModel)dataModel.get(indice).elementAt(11);
                        cheque.setChequeEstadoId(new ChequeEstado(Integer.valueOf(comboEstados.getValue()),comboEstados.getLabel()));
                        if(Integer.parseInt(comboEstados.getValue()) == ChequeEstadoServices.CHEQUE_PENDIENTE){
                            Calendar fechaPendiente = calendarioBancarioServices.calcularSiguienteDiaHabil();
                            cheque.setFechaPendiente(fechaPendiente.getTime());
                            log.info("Próximo día habil : "+fechaPendiente.getTime());
                            log.info("Fecha pendiente asignada!");
                        }
                        cheque.setFechaUpdate(new Date());
                        chequeList.set(indice, cheque);
                        indice++;
                        
                    }
                    
                    return chequeList;
    }
    
    
    
}
